package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.jpa.TblAlerta;
import com.mastercard.assets.jpa.TblNivel;
import com.mastercard.assets.jpa.TblRole;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.NotificacionForm;
import com.mastercard.assets.web.util.to.UserLogin;

public class CrearNotificacionIn
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		NotificacionForm f = ( NotificacionForm ) form ;
		
		if( f == null )
			f = new NotificacionForm( ) ;
		
		request.setAttribute( "CrearNotificacionCrearForm" , f ) ;
		
		// en caso de que se cumpla
		// calcula las alertas activas
		List< TblAlerta > alertas = MasterCardDAO.getAllActiveAlertas( ) ;
		
		// en caso de que no haya alertas
		if( alertas == null || alertas.size( ) == 0 )
		{
			user.setMessageError( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.NoHayAlertas" ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "error" ) ;
		}
		
		// en caso de una alerta solamente
		if( alertas.size( ) == 1 )
		{
			// guarda el numero de alerat
			f.setCveAlerta( alertas.get( 0 ).getCveAlerta( ) ) ;
		}
		
		request.setAttribute( "ActiveAlerts" , alertas ) ;
		
		// calcula los roles
		List< TblRole > roles= MasterCardDAO.getAllActiveRoles( ) ;
		
		// en caso de que no haya
		if( roles == null || roles.size( ) == 0 )
		{
			user.setMessageError( "com.mastercard.assets.web.modules.catalogos.notificaciones.errors.NoHayRoles" ) ;
			
                        MasterCardDAO.closeEntityManager( ) ;
			return mapping.findForward( "error" ) ;
		}
		
		// en caso d que haya un solo rol
		if( roles.size( ) == 1 )
		{
			// toma el role
			TblRole role = roles.get( 0 ) ;
			
			int cveRole = role.getCveRole( ) ;
			
			// guarda
			f.setCveRole( cveRole ) ;
			
			// toma los nieles del role
			List< TblNivel > niveles = MasterCardDAO.getAllActiveLevelsFromRole( cveRole ) ;
			
			// guarda en el request
			request.setAttribute( "ActiveLevels" , niveles ) ;
			
			// en caso de que haya un solo nivel
			if( niveles != null && niveles.size( ) == 1 )
				f.setCveNivel( niveles.get( 0 ).getCveNivel( ) ) ;
			else
				f.setCveNivel( 0 ) ;
		}
		
		// en caso de que cveRole venga mayor de 1
		if( f.getCveRole( ) > 0 )
		{
			// toma los nieles del role
			List< TblNivel > niveles = MasterCardDAO.getAllActiveLevelsFromRole( f.getCveRole( ) ) ;
			
			// guarda en el request
			request.setAttribute( "ActiveLevels" , niveles ) ;
			
			// en caso de que haya un solo nivel
			if( niveles != null && niveles.size( ) == 1 )
				f.setCveNivel( niveles.get( 0 ).getCveNivel( ) ) ;
			else
				f.setCveNivel( 0 ) ;
		}
		
		// calcula los roles activos
		request.setAttribute( "ActiveRoles" , roles ) ;
		
		user.setMessageError( "" ) ;
		
                MasterCardDAO.closeEntityManager( ) ;
                if( user.getIdioma( ) == 0 ) {
                    return mapping.findForward( "success" ) ;
                } else
                    return mapping.findForward( "successEng" ) ;
	  	
	}
	
}
